﻿//using Core.Experiment.Anim;
//using Core.Frame;
//using UnityEngine;

//namespace Core.Experiment
//{
//    public class AnimComponent : Component, IAwake, IFrameUpdate
//    {
//        private GameUnit unit;

//        private ModelComponent model;

//        private Animator animator;
//        private EasyAnimCtl m_anim_ctl;
//        private int frameCount;
//        private string m_cache_anim_path;
//        public void Awake()
//        {
//            unit = Entity as GameUnit;

//            model = unit.Get<ModelComponent>();
//            model.onLoadComplete += OnModelLoadComplete;

//            S.frame.anim.Add(this);
//        }

//        public override void Dispose()
//        {
//            if (IsDisposed) return;
//            base.Dispose();

//            model.onLoadComplete -= OnModelLoadComplete;
//            model = null;

//            animator = null;

//            m_anim_ctl.Dispose();
//            m_anim_ctl = null;
//        }

//        public void Update(int frame, float delta_time)
//        {
//            m_anim_ctl?.Update();
//        }

//        private void OnModelLoadComplete()
//        {
//            animator = model.gameObject.GetComponent<Animator>();

//            m_anim_ctl = G.pool.Create<EasyAnimCtl>();
//            m_anim_ctl.Create(animator);

//            if (string.IsNullOrEmpty(m_cache_anim_path) == false)
//            {
//                Play(m_cache_anim_path).Coroutine();
//                m_cache_anim_path = string.Empty;

//            }
//            Debug.LogError($"{Time.frameCount} AnimComponent.OnModelLoadComplete");
//        }

//        public void CrossFade(string anim_res)
//        {
//            frameCount = S.frame.anim.frameCount;
//            Play(anim_res).Coroutine();
//        }

//        private async ETVoid Play(string anim_res)
//        {
//            var asset = await G.res.LoadAsync(anim_res);

//            if (asset == null)
//            {
//                Debug.LogError($"Player动画资源不存在 anim_res={anim_res}");
//                return;
//            }

//            var clip = asset.Obj as AnimationClip;

//            Play(clip, anim_res);
//        }

//        protected void Play(AnimationClip clip, string anim_path)
//        {
//            //Debug.LogError($"{Time.frameCount} AnimComponent.Play anim={anim_path} ");
//            if (m_anim_ctl == null)
//            {
//                m_cache_anim_path = anim_path;
//                return;
//            }
//            var anim_frame = S.frame.anim;
//            var delta_time = (anim_frame.frameCount - frameCount) * anim_frame.frameTime;
//            m_anim_ctl.Play(anim_path, clip.name, clip, false, 0, true, delta_time);
//        }
//    }
//}
